iT邦幫忙

2023 iThome 鐵人賽

DAY 6
2
AI & Data

dbt: 告別過時的SQL開發流程系列 第 6

DAY 06 - dbt Cloud 入門 (4) - dbt run、materializations

  • 分享至 

  • xImage
  •  

前兩天建立的 model: customers 以顧客主檔為主,關聯 orders,將每位顧客的第一次消費日期、最近消費日期、總訂單數量,合為一個查詢。

那麼,清理出來的邏輯,後續要如何在我們的 BigQuery 看到呢?

今天,我們要聊的是,如何透過 dbt 指令來將這些 model 打到 BigQuery。


執行指令:dbt run

由下方的指令列輸入 dbt run 按下 Enter。
https://ithelp.ithome.com.tw/upload/images/20230917/20159575rV2G6Ec0pt.png

執行完成後檢查一下是否都有成功 (success)。
https://ithelp.ithome.com.tw/upload/images/20230917/20159575AdvqVNSn8B.png

點開 log 可以看看 dbt run 做了什麼事情。
https://ithelp.ithome.com.tw/upload/images/20230806/20159575f370OMwRHH.png

如果想看更詳細,可以點 Details。
https://ithelp.ithome.com.tw/upload/images/20230917/20159575fa51w5EAMg.png

或是上面的 System Logs 也可以點開
https://ithelp.ithome.com.tw/upload/images/20230917/20159575JaWMMJhwHP.png

由 log 可以看出,執行 dbt run 的時候,dbt Cloud server 在我們的 BigQuery 建立了與 model 同名的 view: dbt_dev.customers。(dbt_dev 是我們在 Day 02 建立專案時,指定的 dataset 名稱)

如果我們回到 BigQuery,可以看到執行完指令之後,確實長出了新的 data set: dbt_dev,以及我們剛剛建立的 models,對應的 views:

  • customers
  • stg_customers
  • stg_orders。

https://ithelp.ithome.com.tw/upload/images/20230917/20159575fAWxrhbQnj.png

Materializations

剛剛,我們執行指令 dbt run 後,三個 models 在目標 BiqQuer產生的是 view。
如果要改產成 table,要怎麼做呢?

在 dbt 中,有四種 materializations:

  • view
  • table
  • incremental
  • ephemeral

預設的 materialization 是 view,另一個同樣很基本的 materialization 則是 table。
其他兩個較進階,今天不會多說明。

Materialization 可以依每個 model 分別指定,也可以在設定檔中指定一整個專案或一整個資料夾的預設materialization,接下來我會分別說明。

方法1:依 model 指定 materialization

在 customers model 最上面加上 {{ config(materialized="table") }}
https://ithelp.ithome.com.tw/upload/images/20230806/20159575c0dQCHKtKN.png

加完之後存檔執行 dbt run ,執行完成之後可以從 log 看到該 model 被跑成 table
https://ithelp.ithome.com.tw/upload/images/20230917/20159575BweF0szwy6.png

在 BigQuery 看到 customers 確實由原本的 view 變成了 table
https://ithelp.ithome.com.tw/upload/images/20230917/20159575Kjg53Flz6L.png

方法2:改變 project 或 folder 預設的 materialization

開啟 dbt_project.yml,在 models 底下的 jaffle_shop 下面加上 materialized: table(請注意縮排)
https://ithelp.ithome.com.tw/upload/images/20230917/20159575ByQZXCC2Dx.png

存檔後再次執行 dbt run,到 BigQuery 檢查結果,可以看到除了 customers 之外,其他兩個 model 也被產成了 table。
https://ithelp.ithome.com.tw/upload/images/20230917/20159575NvY7u0uFrE.png


今日小結&明日預告

今天我們示範了第一個 dbt 指令 dbt run,以及將 view 如何切換為 table。

依照慣例,我們再次 Commit,提交今天的異動。
https://ithelp.ithome.com.tw/upload/images/20230917/201595758ae2E8RkAb.png

除此之外,因明天我們要進入 Deployment 的部份,目前我的異動都在 demo 分支,但 Deployment 取的是 main branch。所以我們要把目前為止的異動,從 demo branch merge 到 main branch。

Create pull request
https://ithelp.ithome.com.tw/upload/images/20230917/20159575yUAaJHEjlW.png

再點一次 Create pull request
https://ithelp.ithome.com.tw/upload/images/20230917/20159575wHeGkiGbTH.png

Title 和 Description 自由填寫,再點一次 Create pull request
https://ithelp.ithome.com.tw/upload/images/20230917/20159575VnbxnBBG2k.png

點選 Merge pull request
https://ithelp.ithome.com.tw/upload/images/20230917/20159575DhgJUQaTRv.png

Confirm merge
https://ithelp.ithome.com.tw/upload/images/20230917/201595751Hdfhmpbyy.png

完成後,這些異動就會在 main branch 生效。
https://ithelp.ithome.com.tw/upload/images/20230917/20159575uyQniP6R2Y.png

明天的主題:dbt Cloud Deployment,如何將我們的 dbt models 佈署到正式環境。

參考資料


歡迎加入 dbt community
對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加


上一篇
DAY 05 - dbt Cloud 入門 (3) - Modularize Our dbt Models
下一篇
DAY 07 - dbt Cloud 入門 (5) - dbt Cloud Deployment
系列文
dbt: 告別過時的SQL開發流程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言